package com.kty.methods.mhys.dao;

import lombok.Data;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Data
public class MhysOther {

    /**
     * 天干
     */
    private final Map<String, Integer> TIAN_GAN = new HashMap<String, Integer>() {
        private static final long serialVersionUID = -1;

        {
            put("甲", 1);
            put("乙", 2);
            put("丙", 3);
            put("丁", 4);
            put("戊", 5);
            put("己", 6);
            put("庚", 7);
            put("辛", 8);
            put("壬", 9);
            put("癸", 10);
        }
    };
    /**
     * 地支
     */
    private final Map<String, Integer> DI_ZHI = new HashMap<String, Integer>() {
        private static final long serialVersionUID = -1;

        {
            put("子", 1);
            put("丑", 2);
            put("寅", 3);
            put("卯", 4);
            put("辰", 5);
            put("巳", 6);
            put("午", 7);
            put("未", 8);
            put("申", 9);
            put("酉", 10);
            put("戌", 11);
            put("亥", 12);
        }
    };

    /**
     * 先天八卦图形
     */
    private final Map<String, String> BA_GUA_TU = new HashMap<String, String>() {
        private static final long serialVersionUID = -1;

        {
            put("乾", "☰"); // 1
            put("兑", "☱"); // 2
            put("离", "☲"); // 3
            put("震", "☳"); // 4
            put("巽", "☴"); // 5
            put("坎", "☵"); // 6
            put("艮", "☶"); // 7
            put("坤", "☷"); // 8
        }
    };
    /**
     * 先天八卦图形代表数字
     */
    private final Map<String, Integer> BA_GUA_SHU = new HashMap<String, Integer>() {
        private static final long serialVersionUID = -1;

        {
            put("☰", 1); // 乾
            put("☱", 2); // 兑
            put("☲", 3); // 离
            put("☳", 4); // 震
            put("☴", 5); // 巽
            put("☵", 6); // 坎
            put("☶", 7); // 艮
            put("☷", 8); // 坤
        }
    };
    /**
     * 先天八卦：乾一、兑二、离三、震四、巽五、坎六、艮七、坤八
     */
    private final Map<Integer, String> BA_GUA = new HashMap<Integer, String>() {
        private static final long serialVersionUID = -1;

        {
            put(1, "乾");
            put(2, "兑");
            put(3, "离");
            put(4, "震");
            put(5, "巽");
            put(6, "坎");
            put(7, "艮");
            put(8, "坤");
        }
    };
    /**
     * 八卦代表图形及其数字（自上而下：0为阴，1为阳）
     */
    private final Map<String, List<Integer>> BA_GUA_TUSHU = new HashMap<String, List<Integer>>() {
        private static final long serialVersionUID = -1;

        {
            // 例：乾卦（☰）；上爻为1，中爻为1，下爻为1
            // ...
            put("☰", Arrays.asList(1, 1, 1)); // 乾
            put("☱", Arrays.asList(0, 1, 1)); // 兑
            put("☲", Arrays.asList(1, 0, 1)); // 离
            put("☳", Arrays.asList(0, 0, 1)); // 震
            put("☴", Arrays.asList(1, 1, 0)); // 巽
            put("☵", Arrays.asList(0, 1, 0)); // 坎
            put("☶", Arrays.asList(1, 0, 0)); // 艮
            put("☷", Arrays.asList(0, 0, 0)); // 坤
        }
    };
    /**
     * 八卦上中下爻代表数字及其图形（自上而下：0为阴，1为阳）
     */
    private final Map<List<Integer>, String> BA_GUA_SHUTU = new HashMap<List<Integer>, String>() {
        private static final long serialVersionUID = -1;

        {
            // 例：上爻为1，中爻为1，下爻为1；则为乾卦（☰）
            // ...
            put(Arrays.asList(1, 1, 1), "☰"); // 乾
            put(Arrays.asList(0, 1, 1), "☱"); // 兑
            put(Arrays.asList(1, 0, 1), "☲"); // 离
            put(Arrays.asList(0, 0, 1), "☳"); // 震
            put(Arrays.asList(1, 1, 0), "☴"); // 巽
            put(Arrays.asList(0, 1, 0), "☵"); // 坎
            put(Arrays.asList(1, 0, 0), "☶"); // 艮
            put(Arrays.asList(0, 0, 0), "☷"); // 坤
        }
    };

    /**
     * 六十四卦：
     * 乾﹑坤﹑屯﹑蒙﹑需﹑讼﹑师﹑比﹑
     * 小畜﹑履﹑泰﹑否﹑同人﹑大有﹑谦﹑豫﹑
     * 随﹑蛊﹑临﹑观﹑噬嗑﹑贲﹑剥﹑复﹑
     * 无妄﹑大畜﹑颐﹑大过﹑坎﹑离﹑咸﹑恒﹑
     * 遁﹑大壮﹑晋﹑明夷﹑家人﹑睽﹑蹇﹑解﹑
     * 损﹑益﹑夬﹑姤﹑萃﹑升﹑困﹑井﹑
     * 革﹑鼎﹑震﹑艮﹑渐﹑归妹﹑丰﹑旅﹑
     * 巽﹑兑﹑涣﹑节﹑中孚﹑小过﹑既济﹑未济
     */
    private final Map<String, String> LIU_SHI_SI_GUA = new HashMap<String, String>() {
        private static final long serialVersionUID = -1;

        {
            put("䷀", "乾为天卦");
            put("䷁", "坤为地卦");
            put("䷂", "水雷屯卦");
            put("䷃", "山水蒙卦");
            put("䷄", "水天需卦");
            put("䷅", "天水讼卦");
            put("䷆", "地水师卦");
            put("䷇", "水地比卦");
            put("䷈", "风天小畜卦");
            put("䷉", "天泽履卦");
            put("䷊", "地天泰卦");
            put("䷋", "天地否卦");
            put("䷌", "天火同人卦");
            put("䷍", "火天大有卦");
            put("䷎", "地山谦卦");
            put("䷏", "雷地豫卦");
            put("䷐", "泽雷随卦");
            put("䷑", "山风蛊卦");
            put("䷒", "地泽临卦");
            put("䷓", "风地观卦");
            put("䷔", "火雷噬嗑卦");
            put("䷕", "山火贲卦");
            put("䷖", "山地剥卦");
            put("䷗", "地雷复卦");
            put("䷘", "天雷无妄卦");
            put("䷙", "山天大畜卦");
            put("䷚", "山雷颐卦");
            put("䷛", "泽风大过卦");
            put("䷜", "坎为水卦");
            put("䷝", "离为火卦");
            put("䷞", "泽山咸卦");
            put("䷟", "雷风恒卦");
            put("䷠", "天山遁卦");
            put("䷡", "雷天大壮卦");
            put("䷢", "火地晋卦");
            put("䷣", "地火明夷卦");
            put("䷤", "风火家人卦");
            put("䷥", "火泽睽卦");
            put("䷦", "水山蹇卦");
            put("䷧", "雷水解卦");
            put("䷨", "山泽损卦");
            put("䷩", "风雷益卦");
            put("䷪", "泽天夬卦");
            put("䷫", "天风姤卦");
            put("䷬", "泽地萃卦");
            put("䷭", "地风升卦");
            put("䷮", "泽水困卦");
            put("䷯", "水风井卦");
            put("䷰", "泽火革卦");
            put("䷱", "火风鼎卦");
            put("䷲", "震为雷卦");
            put("䷳", "艮为山卦");
            put("䷴", "风山渐卦");
            put("䷵", "雷泽归妹卦");
            put("䷶", "雷火丰卦");
            put("䷷", "火山旅卦");
            put("䷸", "巽为风卦");
            put("䷹", "兑为泽卦");
            put("䷺", "风水涣卦");
            put("䷻", "水泽节卦");
            put("䷼", "风泽中孚卦");
            put("䷽", "雷山小过卦");
            put("䷾", "水火既济卦");
            put("䷿", "火水未济卦");
        }
    };
    /**
     * 六十四卦图形
     */
    private final Map<List<Integer>, String> LIU_SHI_SI_GUA_TU = new HashMap<List<Integer>, String>() {
        private static final long serialVersionUID = -1;

        {
            // 例：上卦数为1，下卦数为1；则为【乾为天卦（天）】
            // ...
            put(Arrays.asList(1, 1), "䷀"); // 乾为天卦（乾）
            put(Arrays.asList(8, 8), "䷁"); // 坤为地卦（坤）
            put(Arrays.asList(6, 4), "䷂"); // 水雷屯卦（屯）
            put(Arrays.asList(7, 6), "䷃"); // 山水蒙卦（蒙）
            put(Arrays.asList(6, 1), "䷄"); // 水天需卦（需）
            put(Arrays.asList(1, 6), "䷅"); // 天水讼卦（讼）
            put(Arrays.asList(8, 6), "䷆"); // 地水师卦（师）
            put(Arrays.asList(6, 8), "䷇"); // 水地比卦（比）
            put(Arrays.asList(5, 1), "䷈"); // 风天小畜卦（小畜）
            put(Arrays.asList(1, 2), "䷉"); // 天泽履卦（履）
            put(Arrays.asList(8, 1), "䷊"); // 地天泰卦（泰）
            put(Arrays.asList(1, 8), "䷋"); // 天地否卦（否）
            put(Arrays.asList(1, 3), "䷌"); // 天火同人卦（同人）
            put(Arrays.asList(3, 1), "䷍"); // 火天大有卦（大有）
            put(Arrays.asList(8, 7), "䷎"); // 地山谦卦（谦）
            put(Arrays.asList(4, 8), "䷏"); // 雷地豫卦（豫）
            put(Arrays.asList(2, 4), "䷐"); // 泽雷随卦（随）
            put(Arrays.asList(7, 5), "䷑"); // 山风蛊卦（蛊）
            put(Arrays.asList(8, 2), "䷒"); // 地泽临卦（临）
            put(Arrays.asList(5, 8), "䷓"); // 风地观卦（观）
            put(Arrays.asList(3, 4), "䷔"); // 火雷噬嗑卦（噬嗑）
            put(Arrays.asList(7, 3), "䷕"); // 山火贲卦（贲）
            put(Arrays.asList(7, 8), "䷖"); // 山地剥卦（剥）
            put(Arrays.asList(8, 4), "䷗"); // 地雷复卦（复）
            put(Arrays.asList(1, 4), "䷘"); // 天雷无妄卦（无妄）
            put(Arrays.asList(7, 1), "䷙"); // 山天大畜卦（大畜）
            put(Arrays.asList(7, 4), "䷚"); // 山雷颐卦（颐）
            put(Arrays.asList(2, 5), "䷛"); // 泽风大过卦（大过）
            put(Arrays.asList(6, 6), "䷜"); // 坎为水卦（水）
            put(Arrays.asList(3, 3), "䷝"); // 离为火卦（火）
            put(Arrays.asList(2, 7), "䷞"); // 泽山咸卦（咸）
            put(Arrays.asList(4, 5), "䷟"); // 雷风恒卦（恒）
            put(Arrays.asList(1, 7), "䷠"); // 天山遁卦（遁）
            put(Arrays.asList(4, 1), "䷡"); // 雷天大壮卦（大壮）
            put(Arrays.asList(3, 8), "䷢"); // 火地晋卦（晋）
            put(Arrays.asList(8, 3), "䷣"); // 地火明夷卦（明夷）
            put(Arrays.asList(5, 3), "䷤"); // 风火家人卦（家人）
            put(Arrays.asList(3, 2), "䷥"); // 火泽睽卦（睽）
            put(Arrays.asList(6, 7), "䷦"); // 水山蹇卦（蹇）
            put(Arrays.asList(4, 6), "䷧"); // 雷水解卦（解）
            put(Arrays.asList(7, 2), "䷨"); // 山泽损卦（损）
            put(Arrays.asList(5, 4), "䷩"); // 风雷益卦（益）
            put(Arrays.asList(2, 1), "䷪"); // 泽天夬卦（夬）
            put(Arrays.asList(1, 5), "䷫"); // 天风姤卦（姤）
            put(Arrays.asList(2, 8), "䷬"); // 泽地萃卦（萃）
            put(Arrays.asList(8, 5), "䷭"); // 地风升卦（升）
            put(Arrays.asList(2, 6), "䷮"); // 泽水困卦（困）
            put(Arrays.asList(6, 5), "䷯"); // 水风井卦（井）
            put(Arrays.asList(2, 3), "䷰"); // 泽火革卦（革）
            put(Arrays.asList(3, 5), "䷱"); // 火风鼎卦（鼎）
            put(Arrays.asList(4, 4), "䷲"); // 震为雷卦（震）
            put(Arrays.asList(7, 7), "䷳"); // 艮为山卦（艮）
            put(Arrays.asList(5, 7), "䷴"); // 风山渐卦（渐）
            put(Arrays.asList(4, 2), "䷵"); // 雷泽归妹卦（归妹）
            put(Arrays.asList(4, 3), "䷶"); // 雷火丰卦（丰）
            put(Arrays.asList(3, 7), "䷷"); // 火山旅卦（旅）
            put(Arrays.asList(5, 5), "䷸"); // 巽为风卦（巽）
            put(Arrays.asList(2, 2), "䷹"); // 兑为泽卦（兑）
            put(Arrays.asList(5, 6), "䷺"); // 风水涣卦（涣）
            put(Arrays.asList(6, 2), "䷻"); // 水泽节卦（节）
            put(Arrays.asList(5, 2), "䷼"); // 风泽中孚卦（中孚）
            put(Arrays.asList(4, 7), "䷽"); // 雷山小过卦（小过）
            put(Arrays.asList(6, 3), "䷾"); // 水火既济卦（既济）
            put(Arrays.asList(3, 6), "䷿"); // 火水未济卦（未济）
        }
    };

    /**
     * 本卦 变 变卦
     */
    private final Map<Integer, List<Integer>> BIAN_GUA = new HashMap<Integer, List<Integer>>() {
        private static final long serialVersionUID = -1;

        {
            // 乾一、兑二、离三、震四、巽五、坎六、艮七、坤八
            // 乾三连、兑上缺、离中虚、震仰盂、巽下断、坎中满、艮覆碗、坤六断
            put(1, Arrays.asList(5, 3, 2)); // 乾卦【☰】（动爻数为：1\4则变为{巽[☴]}，为2\5则变为{离[☲]}，为3\6则变为{兑[☱]}）
            put(2, Arrays.asList(6, 4, 1)); // 兑卦【☱】（动爻数为：1\4则变为{坎[☵]}，为2\5则变为{震[☳]}，为3\6则变为{乾[☰]}）
            put(3, Arrays.asList(7, 1, 4)); // 离卦【☲】（动爻数为：1\4则变为{艮[☶]}，为2\5则变为{乾[☰]}，为3\6则变为{震[☳]}）
            put(4, Arrays.asList(8, 2, 3)); // 震卦【☳】（动爻数为：1\4则变为{坤[☷]}，为2\5则变为{兑[☱]}，为3\6则变为{离[☲]}）
            put(5, Arrays.asList(1, 7, 6)); // 巽卦【☴】（动爻数为：1\4则变为{乾[☰]}，为2\5则变为{艮[☶]}，为3\6则变为{坎[☵]}）
            put(6, Arrays.asList(2, 8, 5)); // 坎卦【☵】（动爻数为：1\4则变为{兑[☱]}，为2\5则变为{坤[☷]}，为3\6则变为{巽[☴]}）
            put(7, Arrays.asList(3, 5, 8)); // 艮卦【☶】（动爻数为：1\4则变为{离[☲]}，为2\5则变为{巽[☴]}，为3\6则变为{坤[☷]}）
            put(8, Arrays.asList(4, 6, 7)); // 坤卦【☷】（动爻数为：1\4则变为{震[☳]}，为2\5则变为{坎[☵]}，为3\6则变为{艮[☶]}）

        }
    };
    /**
     * 本卦 变（错卦、综卦）
     * ☆错卦：本卦阳爻变阴爻，阴爻变阳爻（阳爻：—   阴爻：--）
     * ☆综卦：本卦上下180°旋转
     */
    private final Map<String, List<String>> CUO_AND_ZONG = new HashMap<String, List<String>>() {
        private static final long serialVersionUID = -1;

        {
            // 例：乾卦(䷀){错卦为坤卦(䷁)，综卦为乾卦(䷀)}
            // ...
            //  本卦                错卦  综卦
            put("䷀", Arrays.asList("䷁", "䷀")); // 乾1
            put("䷁", Arrays.asList("䷀", "䷁")); // 坤2
            put("䷂", Arrays.asList("䷱", "䷃")); // 屯3
            put("䷃", Arrays.asList("䷰", "䷂")); // 蒙4
            put("䷄", Arrays.asList("䷢", "䷅")); // 需5
            put("䷅", Arrays.asList("䷣", "䷄")); // 讼6
            put("䷆", Arrays.asList("䷌", "䷇")); // 师7
            put("䷇", Arrays.asList("䷍", "䷆")); // 比8
            put("䷈", Arrays.asList("䷏", "䷉")); // 小畜9
            put("䷉", Arrays.asList("䷎", "䷈")); // 履10
            put("䷊", Arrays.asList("䷋", "䷋")); // 泰11
            put("䷋", Arrays.asList("䷊", "䷊")); // 否12
            put("䷌", Arrays.asList("䷆", "䷍")); // 同人13
            put("䷍", Arrays.asList("䷇", "䷌")); // 大有14
            put("䷎", Arrays.asList("䷉", "䷏")); // 谦15
            put("䷏", Arrays.asList("䷈", "䷎")); // 豫16
            put("䷐", Arrays.asList("䷑", "䷑")); // 随17
            put("䷑", Arrays.asList("䷐", "䷐")); // 蛊18
            put("䷒", Arrays.asList("䷠", "䷓")); // 临19
            put("䷓", Arrays.asList("䷡", "䷒")); // 观20
            put("䷔", Arrays.asList("䷯", "䷕")); // 噬嗑21
            put("䷕", Arrays.asList("䷮", "䷔")); // 贲22
            put("䷖", Arrays.asList("䷪", "䷗")); // 剥23
            put("䷗", Arrays.asList("䷫", "䷖")); // 复24
            put("䷘", Arrays.asList("䷭", "䷙")); // 无妄25
            put("䷙", Arrays.asList("䷬", "䷘")); // 大畜26
            put("䷚", Arrays.asList("䷛", "䷚")); // 颐27
            put("䷛", Arrays.asList("䷚", "䷛")); // 大过28
            put("䷜", Arrays.asList("䷝", "䷜")); // 坎29
            put("䷝", Arrays.asList("䷜", "䷝")); // 离30
            put("䷞", Arrays.asList("䷨", "䷟")); // 咸31
            put("䷟", Arrays.asList("䷩", "䷞")); // 恒32
            put("䷠", Arrays.asList("䷒", "䷡")); // 遁33
            put("䷡", Arrays.asList("䷓", "䷠")); // 大壮34
            put("䷢", Arrays.asList("䷄", "䷣")); // 晋35
            put("䷣", Arrays.asList("䷅", "䷢")); // 明夷36
            put("䷤", Arrays.asList("䷧", "䷥")); // 家人37
            put("䷥", Arrays.asList("䷦", "䷤")); // 睽38
            put("䷦", Arrays.asList("䷥", "䷧")); // 蹇39
            put("䷧", Arrays.asList("䷤", "䷦")); // 解40
            put("䷨", Arrays.asList("䷞", "䷩")); // 损41
            put("䷩", Arrays.asList("䷟", "䷨")); // 益42
            put("䷪", Arrays.asList("䷖", "䷫")); // 夬43
            put("䷫", Arrays.asList("䷗", "䷪")); // 姤44
            put("䷬", Arrays.asList("䷙", "䷭")); // 萃45
            put("䷭", Arrays.asList("䷘", "䷬")); // 升46
            put("䷮", Arrays.asList("䷕", "䷯")); // 困47
            put("䷯", Arrays.asList("䷔", "䷮")); // 井48
            put("䷰", Arrays.asList("䷃", "䷱")); // 革49
            put("䷱", Arrays.asList("䷂", "䷰")); // 鼎50
            put("䷲", Arrays.asList("䷸", "䷳")); // 震51
            put("䷳", Arrays.asList("䷹", "䷲")); // 艮52
            put("䷴", Arrays.asList("䷵", "䷵")); // 渐53
            put("䷵", Arrays.asList("䷴", "䷴")); // 归妹54
            put("䷶", Arrays.asList("䷺", "䷷")); // 丰55
            put("䷷", Arrays.asList("䷻", "䷶")); // 旅56
            put("䷸", Arrays.asList("䷲", "䷹")); // 巽57
            put("䷹", Arrays.asList("䷳", "䷸")); // 巽58
            put("䷺", Arrays.asList("䷶", "䷻")); // 涣59
            put("䷻", Arrays.asList("䷷", "䷺")); // 节60
            put("䷼", Arrays.asList("䷽", "䷽")); // 中孚61
            put("䷽", Arrays.asList("䷼", "䷼")); // 小过62
            put("䷾", Arrays.asList("䷿", "䷿")); // 既济63
            put("䷿", Arrays.asList("䷾", "䷾")); // 未济64

        }
    };

}
